/*
       ajax_get请求方式封装 
       @param {String}  url 表示请求地址
       @param {Object}  query 表示请求参数
       @param {Function}  success 表示成功时候的回调函数
       @param {Function}  error 表示失败时候的回调函数
       */
function pAjaxGet(options) {
    return new Promise((resolve, reject) => {
        // 判断url必传
        if (!options.url) {
            alert('请填写请求地址')
            return false
        }
        //  创建对象
        var xhr = new XMLHttpRequest()
        if (options.query) {
            var str = '?'
            for (var key in options.query) {
                str += `${key}=${options.query[key]}`
                str += '&'
            }

            str = str.slice(0, -1)
            xhr.open('get', options.url + str)
        } else {
            xhr.open('get', options.url)
        }
        //  三元表达式 判断是否有传递的参数 
        // xhr.open('get', query ? url + str : url)

        xhr.send()
        xhr.onreadystatechange = () => {

            if (xhr.readyState == 4) {

                if (xhr.status == 200) {
                    // options.success && options.success(xhr.response)
                    resolve(xhr.response)

                } else {
                    //  options.error && options.error(xhr.response)
                    reject(xhr.response)
                }

            }

        }
    })

}


/*
       ajax_post请求方式封装 
       @param {String}  url 表示请求地址
       @param {Object}  query 表示请求参数
       @param {Function}  success 表示成功时候的回调函数
       @param {Function}  error 表示失败时候的回调函数
       */
function ajaxPost(options) {
    // 判断url必传
    if (!options.url) {
        alert('请填写请求地址')
        return false
    }
    //  创建对象
    var xhr = new XMLHttpRequest()
    xhr.open('post', options.url)
    //如果需要像 HTML 表单那样 POST 数据,以&形式传输数据
    xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded');
    if (options.query) {
        var str = ''
        for (var key in options.query) {
            str += `${key}=${options.query[key]}`
            str += '&'
        }
        str = str.slice(0, -1)
        xhr.send(str)
    } else {
        xhr.send(str)
    }
    //  三元表达式 判断是否有传递的参数 
    // xhr.send( options.query ?  str : '')

    xhr.onreadystatechange = () => {

        if (xhr.readyState == 4) {

            if (xhr.status == 200) {
                options.success && options.success(xhr.response)

            } else {
                options.error && options.error(xhr.response)
            }

        }

    }

}
function pAjaxPost(options) {

    return new Promise((resolve, reject) => {
        // 判断url必传
        if (!options.url) {
            alert('请填写请求地址')
            return false
        }
        //  创建对象
        var xhr = new XMLHttpRequest()
        xhr.open('post', options.url)
        //如果需要像 HTML 表单那样 POST 数据,以&形式传输数据
        xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded');
        if (options.query) {
            var str = ''
            for (var key in options.query) {
                str += `${key}=${options.query[key]}`
                str += '&'
            }
            str = str.slice(0, -1)
            xhr.send(str)
        } else {
            xhr.send(str)
        }
        //  三元表达式 判断是否有传递的参数 
        // xhr.send( options.query ?  str : '')

        xhr.onreadystatechange = () => {

            if (xhr.readyState == 4) {

                if (xhr.status == 200) {
                    resolve(xhr.response)

                } else {
                    reject(xhr.response)
                }

            }

        }

    })


}

/*
     jsonp跨域封装 
     @param {String} url  代表请求地址  
     @param {Object} query  代表请求参数  
     */

function jsonP(url, query) {
    if (!url || !query) {
        alert('url 和参数必传！')
        return
    }
    var script = document.createElement('script')
    var str = '?'
    for (var key in query) {
        str += `${key}=${query[key]}&`
    }
    str = str.slice(0, -1)
    script.src = url + str
    document.body.appendChild(script)
    document.body.removeChild(script)
}

/*
         设置cookie
         + @param {string} name 设置cookie的名称
         + @param {string} value 设置cookie的值
         + @param {string} time 设置cookie的过期时间
     */
function setCookie(name, value, time) {
    //判读有无设置过期时间
    if (time) {
        let d = new Date()
        d.setDate(d.getDate() + time)
        let t = d.toUTCString()
        document.cookie = `${name}=${value};expires=${t};path=/`
    } else {
        document.cookie = `${name}=${value};path=/`
    }
}

/*
     删除cookie
     + @param {string} name 设置cookie的名称
 */
function delCookie(name) {
    setCookie(name, 1, -1)
}

/*
     获取cookie
     + @param {string} name 设置cookie的名称
 */
function getCookie(name) {
    //存储多个cookie时，拆分的分号后有空格
    let arr = document.cookie.split('; ')
    let obj = {}

    arr.forEach(item => {
        let newArr = item.split('=')

        obj[newArr[0]] = newArr[1]
    })
    return obj[name]
}